common.skill

ডেটাবেজ ট্রানজাকশন এবং সমালোচনা

Database Tutorials - অ্যাপাচি ডার্বি (Apache Derby)
202
202

ডেটাবেজ ট্রানজাকশন হল ডেটাবেজ পরিচালনায় একটি মৌলিক ধারণা, যা একাধিক ডেটাবেস অপারেশন (যেমন: ইনসার্ট, আপডেট, ডিলিট) একটি একক ইউনিট হিসাবে সম্পাদিত হয়। এর মূল উদ্দেশ্য হল ডেটাবেসে ডেটার ইন্টেগ্রিটি এবং স্থায়িত্ব নিশ্চিত করা। ট্রানজেকশন সাধারনত ACID বৈশিষ্ট্যগুলি অনুসরণ করে।


ডেটাবেজ ট্রানজাকশন:

ডেটাবেজ ট্রানজেকশনকে সাধারণত চারটি মূল বৈশিষ্ট্য দ্বারা চিহ্নিত করা হয়, যেগুলি ACID (Atomicity, Consistency, Isolation, Durability) নামে পরিচিত:

১. Atomicity (অ্যাটমিসিটি):

এটি নিশ্চিত করে যে, একটি ট্রানজেকশনের মধ্যে সমস্ত অপারেশন সম্পূর্ণভাবে বা একদমই কার্যকরী হয়। অর্থাৎ, যদি কোন একটি অপারেশন ব্যর্থ হয়, তবে পুরো ট্রানজেকশনটি রোলব্যাক হয়ে যাবে, এবং ডেটাবেস পূর্বাবস্থায় ফিরে যাবে।

উদাহরণ: যদি আপনি একটি অ্যাকাউন্টে টাকা ট্রান্সফার করেন, তবে দুইটি অপারেশন থাকে:

  • একটি অ্যাকাউন্ট থেকে টাকা কমানো
  • অন্য অ্যাকাউন্টে টাকা যোগ করা

যদি কোনো কারণে দ্বিতীয় অপারেশন ব্যর্থ হয়, তবে প্রথম অপারেশনও রোলব্যাক হবে।

২. Consistency (সঙ্গতি):

এটি নিশ্চিত করে যে, ট্রানজেকশন সম্পন্ন হওয়ার পর ডেটাবেস সঙ্গতিপূর্ণ অবস্থায় থাকবে। ডেটাবেসের ডেটা শর্ত পূরণ করে এবং সমস্ত নিয়ম-নীতি বজায় থাকে।

উদাহরণ: যদি একটি ট্রানজেকশনের মাধ্যমে অ্যাকাউন্টের ব্যালান্স পরিবর্তন হয়, তবে ট্রানজেকশনটি শেষ হওয়ার পর অ্যাকাউন্টের ব্যালান্স অবশ্যই সঠিক এবং সঙ্গতিপূর্ণ থাকতে হবে।

৩. Isolation (আইসোলেশন):

এটি নিশ্চিত করে যে, একাধিক ট্রানজেকশন একে অপরের উপর প্রভাব ফেলে না, যতক্ষণ না তারা শেষ না হয়। একাধিক ট্রানজেকশন যখন একই ডেটাতে কাজ করে, তখন তাদের মধ্যে কোনো রকম দ্বন্দ্ব বা হস্তক্ষেপ না ঘটে।

উদাহরণ: একটি ট্রানজেকশন যদি এক অ্যাকাউন্টের ব্যালান্স কমায়, তবে অন্য একটি ট্রানজেকশন একই সময়ে সেই অ্যাকাউন্টে টাকা জমা করলে, প্রথম ট্রানজেকশনটি তার কাজ শেষ না হওয়া পর্যন্ত দ্বিতীয় ট্রানজেকশনটি দেখতে পাবে না।

৪. Durability (স্থিতিশীলতা):

এটি নিশ্চিত করে যে, একটি ট্রানজেকশন সফলভাবে সম্পন্ন হলে, তার পরিবর্তনগুলি ডেটাবেসে স্থায়ীভাবে সংরক্ষিত থাকবে, এমনকি সিস্টেম ক্র্যাশ হলেও। অর্থাৎ, যদি কোনো কারণে সিস্টেম বন্ধ হয়ে যায়, তবে ট্রানজেকশনটির ফলাফল হারিয়ে যাবে না।

উদাহরণ: একটি ডিপোজিট ট্রানজেকশন সফল হলে, সেই পরিবর্তন ডিস্কে সেভ হয়ে যাবে এবং সিস্টেম রিস্টার্ট করার পরেও সেগুলি বজায় থাকবে।


ডেটাবেজ ট্রানজেকশন সমালোচনা

যদিও ডেটাবেজ ট্রানজেকশন গুরুত্বপূর্ণ এবং কার্যকরী, তবুও এর কিছু সমালোচনামূলক দিক রয়েছে:

১. পারফরম্যান্সের প্রভাব:

ট্রানজেকশনগুলি ACID বৈশিষ্ট্যগুলি অনুসরণ করার জন্য অতিরিক্ত রিসোর্স এবং সময় নেয়। বিশেষ করে Isolation স্তর (যেমন Serializable) ব্যবহার করলে পারফরম্যান্স কমে যেতে পারে কারণ এটি একাধিক ট্রানজেকশনের মধ্যে দ্বন্দ্ব প্রতিরোধ করে। এছাড়াও, ট্রানজেকশন লগিং এবং রোলব্যাকের জন্য অতিরিক্ত সময় এবং স্টোরেজ প্রয়োজন হয়, যা পারফরম্যান্সকে প্রভাবিত করতে পারে।

২. ব্যবহারকারীর ত্বরা প্রভাবিত হওয়া:

ট্রানজেকশনের সময়, একাধিক অ্যাক্সেস ও লকিং এর কারণে অন্যান্য ব্যবহারকারীদের কাজ করতে বিলম্ব হতে পারে। যেমন, যখন একটি ট্রানজেকশন চলমান থাকে, তখন সেই ডেটাতে অন্য কোনো ট্রানজেকশন কাজ করতে পারে না। এটি Deadlock তৈরি করতে পারে এবং সিস্টেমের পারফরম্যান্সকে ধীর করে দেয়।

৩. সিস্টেম কনফিগারেশন এবং ডিজাইন চ্যালেঞ্জ:

ডেটাবেজ ট্রানজেকশন সঠিকভাবে পরিচালনার জন্য উপযুক্ত কনফিগারেশন এবং ডিজাইন প্রয়োজন। ভুল কনফিগারেশন যেমন ভুল লকিং স্ট্রাটেজি, আইসোলেশন লেভেল ইত্যাদি, ডেটাবেসের পারফরম্যান্স এবং স্থিতিশীলতা কমিয়ে দিতে পারে।

৪. ডিস্ট্রিবিউটেড ট্রানজেকশন চ্যালেঞ্জ:

ডিস্ট্রিবিউটেড সিস্টেমে (যেখানে ডেটাবেসটি বিভিন্ন সার্ভারে বিভক্ত) ট্রানজেকশন পরিচালনা করা অনেক কঠিন হতে পারে। এখানে Two-Phase Commit (2PC) পদ্ধতি ব্যবহৃত হলেও, এটি Consistency এবং Atomicity বজায় রাখতে অনেক সময় জটিলতা তৈরি করতে পারে। ডিসট্রিবিউটেড ট্রানজেকশনে অধিক লেটেন্সি এবং ব্যান্ডউইথের কারণে কার্যকারিতা কমতে পারে।


উপসংহার

ডেটাবেজ ট্রানজেকশন হচ্ছে একটি গুরুত্বপূর্ণ কনসেপ্ট যা ডেটাবেসের ACID বৈশিষ্ট্য অনুসরণ করে, যা ডেটার ইন্টেগ্রিটি এবং স্থিতিশীলতা নিশ্চিত করে। তবে, এটি কখনো কখনো পারফরম্যান্স সমস্যা সৃষ্টি করতে পারে এবং ডিস্ট্রিবিউটেড সিস্টেমে কিছু চ্যালেঞ্জও হতে পারে। সঠিকভাবে ট্রানজেকশন পরিচালনা এবং কনফিগারেশন করলে এর সুবিধা অনেক বেশি হতে পারে, তবে এই সমালোচনাগুলিও বিবেচনায় নেওয়া প্রয়োজন।

common.content_added_by

ট্রানজাকশন কন্ট্রোল (COMMIT এবং ROLLBACK)

177
177

ট্রানজেকশন কন্ট্রোল হল SQL-এর একটি গুরুত্বপূর্ণ ধারণা, যা ডেটাবেসে একাধিক অপারেশনকে একটি একক ইউনিট হিসেবে পরিচালনা করতে সাহায্য করে। ট্রানজেকশন নিশ্চিত করে যে ডেটাবেসে করা পরিবর্তনগুলো অ্যাটমিক (atomic), নিরাপদ এবং স্বতন্ত্র থাকবে।

COMMIT এবং ROLLBACK হল ট্রানজেকশন কন্ট্রোলের দুটি মূল উপাদান, যা ডেটাবেসে পরিবর্তন সংরক্ষণ (commit) অথবা বাতিল (rollback) করতে ব্যবহৃত হয়।


১. COMMIT

COMMIT কমান্ডটি ব্যবহার করা হয় যখন আপনি একটি ট্রানজেকশনের মধ্যে করা সব অপারেশন সফলভাবে শেষ করেছেন এবং সেই পরিবর্তনগুলো ডেটাবেসে স্থায়ী করতে চান।

COMMIT এর কার্যকলাপ:

  • COMMIT একটি ট্রানজেকশন শেষ করে এবং সমস্ত পরিবর্তন স্থায়ীভাবে ডেটাবেসে সংরক্ষণ করে।
  • একবার COMMIT করা হলে, সেই পরিবর্তনগুলি আর ফিরিয়ে নেয়া (rollback) সম্ভব হয় না।
  • COMMIT সাধারণত ব্যবহৃত হয় যখন আপনি নিশ্চিত হন যে ট্রানজেকশনের মধ্যে করা সমস্ত অপারেশন সঠিক এবং সফল।

উদাহরণ:

-- ট্রানজেকশন শুরু
START TRANSACTION;

-- ডেটা ইনসার্ট করা
INSERT INTO employee (id, name, age) VALUES (1, 'John Doe', 30);

-- ট্রানজেকশন কমিট করা
COMMIT;

এই কোডে:

  • START TRANSACTION দ্বারা ট্রানজেকশন শুরু হয়েছে।
  • INSERT অপারেশনটি সম্পন্ন করার পর, COMMIT কমান্ডটি ট্রানজেকশনকে শেষ করে এবং পরিবর্তনগুলো ডেটাবেসে স্থায়ী করে।

২. ROLLBACK

ROLLBACK কমান্ডটি ব্যবহার করা হয় যখন আপনি ট্রানজেকশনের মধ্যে করা অপারেশন বাতিল করতে চান, অর্থাৎ, পরিবর্তনগুলো ডেটাবেসে ফিরিয়ে নেওয়া (undo) হবে।

ROLLBACK এর কার্যকলাপ:

  • ROLLBACK কমান্ডটি ব্যবহার করার মাধ্যমে ট্রানজেকশনের মধ্যে করা সমস্ত অপারেশন রদ করা হয় এবং ডেটাবেস আগের অবস্থায় ফিরে যায়।
  • এটি সাধারণত ব্যবহৃত হয় যখন একটি ট্রানজেকশন সম্পন্ন হওয়ার পর সেখানে কোনো ত্রুটি বা ভুল থাকে, এবং আপনি সমস্ত পরিবর্তন বাতিল করতে চান।

উদাহরণ:

-- ট্রানজেকশন শুরু
START TRANSACTION;

-- ডেটা ইনসার্ট করা
INSERT INTO employee (id, name, age) VALUES (2, 'Jane Smith', 25);

-- ত্রুটি ঘটলে ট্রানজেকশন রোলব্যাক করা
ROLLBACK;

এই কোডে:

  • START TRANSACTION দ্বারা ট্রানজেকশন শুরু হয়েছে।
  • INSERT অপারেশনটি করা হয়েছে, তবে তার পরে ROLLBACK কমান্ডটি দিয়ে সমস্ত পরিবর্তন বাতিল করা হয়েছে।

৩. COMMIT এবং ROLLBACK এর মধ্যে পার্থক্য

কমান্ডকার্যকলাপ
COMMITসমস্ত পরিবর্তন স্থায়ীভাবে ডেটাবেসে সংরক্ষণ করে।
ROLLBACKসমস্ত পরিবর্তন বাতিল করে এবং ডেটাবেসকে পূর্বাবস্থায় ফিরিয়ে নিয়ে যায়।

৪. ট্রানজেকশন ব্যবহারের উদাহরণ (JDBC)

JDBC ব্যবহার করে ডেটাবেসে COMMIT এবং ROLLBACK কিভাবে করা হয় তা নিচে একটি উদাহরণ দিয়ে দেখানো হলো:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.SQLException;

public class TransactionExample {
    public static void main(String[] args) {
        String url = "jdbc:derby:myDB;create=true";  // ডেটাবেসের URL
        try (Connection conn = DriverManager.getConnection(url);
             Statement stmt = conn.createStatement()) {

            // ট্রানজেকশন শুরু
            conn.setAutoCommit(false);  // Auto-commit বন্ধ

            // ডেটা ইনসার্ট করা
            stmt.executeUpdate("INSERT INTO employee (id, name, age) VALUES (3, 'David White', 40)");

            // যদি কোনো সমস্যা না হয়, তাহলে COMMIT করা
            conn.commit();  // ট্রানজেকশন কমিট করা

            System.out.println("Data inserted and committed successfully.");

        } catch (SQLException e) {
            // কোনো সমস্যা হলে ROLLBACK করা
            try {
                conn.rollback();  // ট্রানজেকশন রোলব্যাক করা
                System.out.println("Transaction rolled back due to error.");
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }
    }
}

এই কোডে:

  • setAutoCommit(false) দ্বারা auto-commit বন্ধ করা হয়েছে, যাতে আমরা স্বয়ংক্রিয়ভাবে COMMIT না করি।
  • commit() মেথড ব্যবহার করে যদি সবকিছু সঠিক থাকে, তাহলে পরিবর্তন স্থায়ী করা হয়।
  • যদি কোনো SQLException ঘটে, তবে rollback() ব্যবহার করে সমস্ত পরিবর্তন বাতিল করা হয়।

সারাংশ

  • COMMIT এবং ROLLBACK হল ট্রানজেকশন কন্ট্রোলের দুটি গুরুত্বপূর্ণ উপাদান।
    • COMMIT ব্যবহার করে ডেটাবেসে করা পরিবর্তনগুলো স্থায়ী করা হয়।
    • ROLLBACK ব্যবহার করে সমস্ত পরিবর্তন বাতিল করা হয় এবং ডেটাবেস পূর্বাবস্থায় ফিরে আসে।
  • এই দুটি কমান্ড ডেটাবেসে নির্ভরযোগ্য এবং অ্যাটমিক অপারেশন নিশ্চিত করতে সাহায্য করে, যেখানে ডেটাবেসের কোনও ভুল অপারেশন বা ত্রুটি ঘটলে পূর্বাবস্থায় ফিরে যাওয়ার সুবিধা থাকে।
common.content_added_by

Derby Locking Mechanism

242
242

Apache Derby একটি রিলেশনাল ডেটাবেস সিস্টেম যা ACID (Atomicity, Consistency, Isolation, Durability) ট্রানজেকশন প্রপার্টি সমর্থন করে এবং ডেটাবেসে একাধিক ক্লায়েন্ট বা ট্রানজেকশনের মধ্যে Concurrency বা একযোগভাবে ডেটাবেস ব্যবহারের জন্য Locking মেকানিজম ব্যবহার করে।

Locking Mechanism মূলত একটি ডেটাবেসের মধ্যে একাধিক ক্লায়েন্ট বা ট্রানজেকশন একই সময়ে ডেটাবেসের তথ্য পরিবর্তন বা এক্সেস করার চেষ্টা করলে ডেটাবেসের ডেটা সঠিকভাবে সংরক্ষণ ও সুরক্ষা নিশ্চিত করার জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে একটি ট্রানজেকশন সম্পূর্ণভাবে শেষ না হওয়া পর্যন্ত অন্য কোন ট্রানজেকশন একই ডেটা পরিবর্তন করতে না পারে।


Derby Locking Mechanism এর মূল ধারণা

  1. Lock Types: Derby বেশ কয়েকটি লক টাইপ ব্যবহার করে, যেমন:
    • Row-level locks: একটি নির্দিষ্ট সারির উপর লক প্রয়োগ করা হয়।
    • Table-level locks: সম্পূর্ণ টেবিলের উপর লক প্রয়োগ করা হয়।
    • Page-level locks: ডেটাবেসের পেজে লক প্রয়োগ করা হয়।
  2. Lock Granularity: Derby তে lock granularity হলো কতটুকু ডেটা লক করা হবে। এটি হতে পারে:
    • Row-level lock: যেখানে শুধুমাত্র একটি নির্দিষ্ট সারি (row) লক করা হয়।
    • Table-level lock: যেখানে পুরো টেবিলের উপর লক প্রয়োগ করা হয়।
    • Page-level lock: যেখানে ডেটাবেস পেজ (যেমন 4KB পেজ) লক করা হয়।
  3. Locking Modes:
    • Shared Lock: যখন একটি ট্রানজেকশন শুধুমাত্র ডেটা পড়বে (SELECT), তখন এটি একটি শেয়ার্ড লক প্রয়োগ করে।
    • Exclusive Lock: যখন একটি ট্রানজেকশন ডেটা আপডেট করবে (INSERT, UPDATE, DELETE), তখন এটি একটি এক্সক্লুসিভ লক প্রয়োগ করে।

Locking Mechanism এর কাজের প্রক্রিয়া

  1. অটোমেটিক লকিং: Derby লকিং প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। অর্থাৎ, ডেটাবেসে বিভিন্ন অপারেশন চালানোর সময়, যেমন SELECT, INSERT, UPDATE, অথবা DELETE ট্রানজেকশন, এটির সাথে সংযুক্ত লকিং মেকানিজম স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়।
  2. Concurrent Transactions: একাধিক ট্রানজেকশন যখন একসঙ্গে ডেটাবেসে কাজ করে, তখন লকিং ব্যবস্থাপনা সঠিকভাবে কাজ করে ডেটা নিরাপত্তা এবং এক্সেস কনফ্লিক্ট এড়াতে। যদি দুটি ট্রানজেকশন একই সময়ে একই সারি বা টেবিলের ওপর কাজ করার চেষ্টা করে, তবে একটিকে অন্যটির উপর লক দিয়ে অপেক্ষা করতে বলা হয়।
  3. Deadlock Handling: একটি deadlock ঘটে যখন দুটি বা তার বেশি ট্রানজেকশন পরস্পরকে লক ধরে রাখে এবং একে অপরকে প্রয়োজনীয় লক মুক্ত না করে। Derby স্বয়ংক্রিয়ভাবে ডেডলক সনাক্ত করে এবং এটি নিরসনের জন্য একটি ট্রানজেকশনকে রোলব্যাক করে।
  4. Transaction Isolation Levels: Derby বিভিন্ন transaction isolation levels সাপোর্ট করে, যা লকিংয়ের আচরণ নিয়ন্ত্রণ করে। এই স্তরের মধ্যে তিনটি প্রধান স্তর হলো:
    • READ COMMITTED: শুধুমাত্র ডেটা যে ট্রানজেকশন কমিট করেছে তা পড়া যাবে।
    • REPEATABLE READ: যখন একটি ট্রানজেকশন একটি নির্দিষ্ট ডেটা পড়েছে, তখন অন্য ট্রানজেকশন এই ডেটা পরিবর্তন করতে পারে না।
    • SERIALIZABLE: একমাত্র একটিমাত্র ট্রানজেকশন সম্পূর্ণভাবে ডেটাবেসের ওপর কাজ করতে পারে, অন্য ট্রানজেকশনগুলির অপেক্ষা করতে হয়।

Derby Locking Mechanism এর সুবিধা এবং সীমাবদ্ধতা

সুবিধা:

  • Concurrency Control: একাধিক ট্রানজেকশন একসাথে কাজ করতে পারে, এবং সঠিকভাবে সমন্বিত হয়ে ডেটাবেসের তথ্য সুরক্ষিত থাকে।
  • Automatic Locking: ডেটাবেসে ট্রানজেকশন করার সময় লকিং প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে কাজ করে, ডেভেলপারদের জন্য এটি অনেক সহজ করে তোলে।
  • Deadlock Detection: ডেডলক সনাক্তকরণ এবং রোলব্যাক প্রক্রিয়াগুলি ডেটাবেসের মধ্যে নিরাপত্তা বজায় রাখে।

সীমাবদ্ধতা:

  • Lock Contention: যখন একাধিক ট্রানজেকশন একই ডেটা এক্সেস করতে চায়, তখন লকিংয়ের কারণে পারফরমেন্স সমস্যা তৈরি হতে পারে। এতে কিছু সময় অপেক্ষা করতে হতে পারে।
  • Deadlock Handling Overhead: ডেডলক সনাক্তকরণ এবং রোলব্যাক প্রক্রিয়াগুলি কখনও কখনও অতিরিক্ত ওভারহেড তৈরি করতে পারে।
  • Limited Isolation Levels: Derby এর লকিং মেকানিজমে কিছু ডেটাবেসের তুলনায় উচ্চতর লেভেল অফ আইসোলেশন সাপোর্ট সীমিত থাকতে পারে।

উপসংহার

Derby Locking Mechanism হল একটি গুরুত্বপূর্ণ উপাদান যা ডেটাবেসে একাধিক ট্রানজেকশনের মধ্যে সঠিকভাবে সমন্বয় রাখে এবং ডেটার সুরক্ষা নিশ্চিত করে। এটি row-level, table-level, এবং page-level লকিং এর মাধ্যমে ডেটাবেস অপারেশনগুলো পরিচালনা করে এবং স্বয়ংক্রিয়ভাবে ডেডলক সনাক্ত ও সমাধান করে। তবে, lock contention এবং deadlock handling-এর জন্য কিছু পারফরমেন্স সমস্যা হতে পারে, যা ডেভেলপারদের কনকর্ডেন্স এবং অপ্টিমাইজেশন কৌশল প্রয়োগে সচেতন হতে সাহায্য করে।

common.content_added_by

Isolation Level এবং Concurrency Control

229
229

Isolation Level এবং Concurrency Control হল ডেটাবেস ট্রানজেকশন ম্যানেজমেন্টের দুটি গুরুত্বপূর্ণ ধারণা, যা ডেটাবেসের কর্মক্ষমতা, এক্সেস, এবং ডেটার সঠিকতা নিশ্চিত করতে সাহায্য করে। এই ধারণাগুলি মূলত ACID (Atomicity, Consistency, Isolation, Durability) গুণাবলীকে বাস্তবায়ন করতে ব্যবহৃত হয়, যেখানে Isolation একটি গুরুত্বপূর্ণ উপাদান।


Isolation Level

Isolation Level একটি ডেটাবেস ট্রানজেকশন কনসেপ্ট, যা ট্রানজেকশনগুলির মধ্যে সম্পর্কের নির্দিষ্ট স্তর নির্ধারণ করে, অর্থাৎ, একাধিক ট্রানজেকশন একই সময়ে চলার সময় তারা একে অপরের ডেটাকে কতটা প্রভাবিত বা সংস্পর্শ করতে পারে তা নির্ধারণ করে। Isolation level সাধারণত SQL ডেটাবেস সিস্টেমে নির্দিষ্ট করা হয়।

Isolation Levels এর ধরন

SQL ডেটাবেসে সাধারণত ৪টি Isolation Level থাকে:

  1. Read Uncommitted:
    • সর্বনিম্ন isolation level।
    • এই স্তরে, একটি ট্রানজেকশন অন্য ট্রানজেকশন দ্বারা কমিট না হওয়া ডেটা (dirty data) পড়তে পারে।
    • Dirty reads এর সমস্যা থাকে, যেখানে একটি ট্রানজেকশন অন্য ট্রানজেকশনের অবস্থা পরিবর্তনকারী ডেটা পড়তে পারে যা পরে রোলব্যাক হতে পারে।
  2. Read Committed:
    • এই স্তরে, ট্রানজেকশন শুধুমাত্র সেগুলি পড়তে পারে যা অন্য ট্রানজেকশন দ্বারা কমিট করা হয়েছে।
    • Non-repeatable reads হতে পারে, যেখানে একটি ট্রানজেকশন প্রথমবার ডেটা পড়ার পর অন্য ট্রানজেকশন সেই ডেটা পরিবর্তন করে, ফলে প্রথম ট্রানজেকশনটি যখন আবার ডেটা পড়বে তখন আগের মতো থাকবেনা।
  3. Repeatable Read:
    • এই স্তরে, যখন একটি ট্রানজেকশন ডেটা পড়তে শুরু করে, তখন সেই ডেটা পরবর্তী সব ডেটা পড়ার জন্য অপরিবর্তিত থাকে যতক্ষণ না ট্রানজেকশনটি শেষ হয়।
    • Phantom reads হতে পারে, যেখানে নতুন রেকর্ড যুক্ত হওয়ার কারণে কুয়েরি ফলাফল পরিবর্তিত হতে পারে।
  4. Serializable:
    • সবচেয়ে শক্তিশালী isolation level।
    • এই স্তরে, একাধিক ট্রানজেকশন একে অপরকে সম্পূর্ণভাবে সিস্টেমে বিচ্ছিন্ন করে এবং এটি পুরোপুরি এমনভাবে কার্যকর করে যেন ট্রানজেকশনগুলি একে অপরের উপর কখনও প্রভাব ফেলতে না পারে।
    • এটি Serializable ট্রানজেকশন কনসিস্টেন্সি রক্ষা করে, তবে এটি ডেটাবেসের কর্মক্ষমতা কমাতে পারে, কারণ একাধিক ট্রানজেকশন একে অপরকে অপেক্ষা করে।

Isolation Level এবং Performance

  • Read Uncommitted: সবচেয়ে কম ট্রানজেকশন লকিং এবং ল্যাটেন্সি, তবে এটি dirty reads, non-repeatable reads এবং phantom reads এর মতো সমস্যা সৃষ্টি করতে পারে।
  • Read Committed: কিছুটা নিরাপদ, তবে non-repeatable reads এখনও হতে পারে।
  • Repeatable Read: অধিক নির্ভরযোগ্য, তবে phantom reads এর সমস্যা থাকতে পারে।
  • Serializable: সবচেয়ে নিরাপদ, কিন্তু ডেটাবেসের কর্মক্ষমতা খুব কমিয়ে দেয়।

Concurrency Control

Concurrency Control হল সেই প্রক্রিয়া যা নিশ্চিত করে যে একাধিক ট্রানজেকশন একই সময়ে ডেটাবেসে পরিবর্তন করে না এবং ডেটা সঠিক থাকে। ডেটাবেস সিস্টেমে একাধিক ট্রানজেকশন একযোগে চালানোর সময়ে, Concurrency Control সমস্যা সমাধান করে যেমন:

  • Lost Updates: একাধিক ট্রানজেকশন একই ডেটা আপডেট করার চেষ্টা করলে একটি আপডেট হারিয়ে যেতে পারে।
  • Temporary Inconsistencies: একাধিক ট্রানজেকশন একই ডেটা পড়তে পারে এবং আপডেট করতে পারে, যার ফলে অস্থায়ী অসামঞ্জস্য সৃষ্টি হতে পারে।
  • Uncommitted Data: অন্য ট্রানজেকশনের কমিট না হওয়া ডেটা ব্যবহার করে ডেটাবেস সঠিক হতে পারে না।
  • Inconsistent Retrievals: ডেটাবেসের মধ্যে আপডেট হতে থাকা ডেটা থেকে অনির্ভরযোগ্য তথ্য পাওয়া যেতে পারে।

Concurrency Control Techniques

  1. Pessimistic Concurrency Control (Pessimistic Locking):
    • এই কৌশলে, ডেটাবেস একটি লক তৈরি করে যাতে অন্য ট্রানজেকশন ওই ডেটাতে কাজ না করতে পারে যতক্ষণ না বর্তমান ট্রানজেকশনটি শেষ হয়।
    • এটি exclusive locks এবং shared locks ব্যবহার করে।
  2. Optimistic Concurrency Control (Optimistic Locking):
    • এখানে লকিং ব্যাবহার করা হয় না, তবে ট্রানজেকশন শেষ হওয়ার পর, একটি validation phase থাকে যেখানে ডেটার পরিবর্তনগুলি পরীক্ষিত হয়। যদি ডেটায় কোন কনফ্লিক্ট থাকে, তাহলে ট্রানজেকশন রোলব্যাক করা হয়।
    • এটি সাধারণত timestamp-based বা version-based সিস্টেম ব্যবহার করে।
  3. Two-Phase Locking (2PL):
    • এটি একটি নির্ভরযোগ্য কৌশল যা ট্রানজেকশন দুটি ধাপে লক ম্যানেজ করে:
      • Growing phase: ট্রানজেকশনটি নতুন লক প্রাপ্ত করে।
      • Shrinking phase: একবার লকগুলো মুক্ত করলে আর নতুন লক নেয়া হয় না।
    • এটি Serializable isolation level এ পৌঁছানোর একটি উপায়।

উপসংহার

Isolation Level এবং Concurrency Control ডেটাবেস ট্রানজেকশন ম্যানেজমেন্টের দুটি অত্যন্ত গুরুত্বপূর্ণ অংশ। Isolation Level ট্রানজেকশনগুলির মধ্যে কীভাবে একে অপরের প্রভাব হ্রাস করবে তা নির্ধারণ করে এবং Concurrency Control নিশ্চিত করে যে একাধিক ট্রানজেকশন একসাথে চললেও ডেটা সঠিক থাকবে। বিভিন্ন অ্যাপ্লিকেশনে, পারফরম্যান্স এবং ডেটা সঠিকতার জন্য সঠিক Isolation Level এবং Concurrency Control কৌশল নির্বাচন করা প্রয়োজন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion